import { Fetch } from '@/composables/useFetch'

/**
 * 微信小程序登录相关工具函数
 */

/**
 * 获取微信小程序登录code
 * @returns {Promise<string>} 返回登录code
 */
export const getWechatCode = () => {
  return new Promise((resolve, reject) => {
    // #ifdef MP-WEIXIN
    wx.login({
      success: (res) => {
        if (res.code) {
          console.log('获取微信登录code成功:', res.code)
          resolve(res.code)
        } else {
          console.error('获取微信登录code失败:', res.errMsg)
          reject(new Error(res.errMsg))
        }
      },
      fail: (err) => {
        console.error('微信登录失败:', err)
        reject(err)
      }
    })
    // #endif

    // #ifndef MP-WEIXIN
    reject(new Error('当前环境不支持微信小程序登录'))
    // #endif
  })
}

/**
 * 获取微信用户信息（需要用户授权）
 * @returns {Promise<Object>} 返回用户信息
 */
export const getWechatUserInfo = () => {
  return new Promise((resolve, reject) => {
    // #ifdef MP-WEIXIN
    wx.getUserProfile({
      desc: '用于完善用户资料',
      success: (res) => {
        console.log('获取用户信息成功:', res.userInfo)
        resolve(res.userInfo)
      },
      fail: (err) => {
        console.error('获取用户信息失败:', err)
        reject(err)
      }
    })
    // #endif

    // #ifndef MP-WEIXIN
    reject(new Error('当前环境不支持获取微信用户信息'))
    // #endif
  })
}

/**
 * 检查微信登录状态
 * @returns {Promise<boolean>} 返回是否已登录
 */
export const checkWechatSession = () => {
  return new Promise((resolve) => {
    // #ifdef MP-WEIXIN
    wx.checkSession({
      success: () => {
        console.log('微信登录状态有效')
        resolve(true)
      },
      fail: () => {
        console.log('微信登录状态已过期')
        resolve(false)
      }
    })
    // #endif

    // #ifndef MP-WEIXIN
    resolve(false)
    // #endif
  })
}

/**
 * 完整的微信登录流程
 * @returns {Promise<Object>} 返回登录结果 {code, userInfo}
 */
export const wechatLogin = async (off=false) => {
  try {
    // 1. 检查登录状态
    let isSessionValid = await checkWechatSession()
    if (off) {
      isSessionValid = false
    }
    if (!isSessionValid) {
      // 2. 获取登录code
      const code = await getWechatCode()

      // 3. 获取用户信息（可选，需要用户授权）
      // let userInfo = null
      // try {
      //   userInfo = await getWechatUserInfo()
      // } catch (err) {
      //   console.log('用户拒绝授权获取信息:', err)
      // }

      return {
        code,
        isNewLogin: true
      }
    }

    return {
      code: null,
      userInfo: null,
      isNewLogin: false
    }
  } catch (error) {
    console.error('微信登录流程失败:', error)
    throw error
  }
}

/**
 * 使用code进行后端登录 - 使用统一的Fetch方法
 * @param {string} code 微信登录code
 * @returns {Promise<Object>} 返回登录结果
 */
export const loginWithCode = async (code) => {
  try {
    // 使用统一的Fetch方法而不是直接使用uni.request
    const res = await Fetch('shopping/login/wechatCode', {
      method: 'get',
      data: { code }
    })
    console.log(res,'denglu');

    if ( res.data.code === 200) {
      return res.data.data
    } else {
      throw new Error(data.msg || '登录失败')
    }
  } catch (error) {
    console.error('后端登录失败:', error)
    throw error
  }
}

/**
 * 获取微信手机号
 * @param {string} code 手机号获取凭证
 * @returns {Promise<Object>} 返回手机号信息
 */
export const getWechatPhoneNumber = async (code) => {
  try {
    const { data, status } = await Fetch('/api/auth/wechat-phone', {
      method: 'POST',
      data: { code }
    })

    if (status === 200 && data.code === 0) {
      return data.result
    } else {
      throw new Error(data.msg || '获取手机号失败')
    }
  } catch (error) {
    console.error('获取微信手机号失败:', error)
    throw error
  }
}
